package linkedlist;

import java.util.LinkedList;

/**
 * MyHashMap() 用空映射初始化对象
 * void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。
 * 如果 key 已经存在于映射中，则更新其对应的值 value 。
 * int get(int key) 返回特定的 key 所映射的 value ；如果映射中不包含 key 的映射，返回 -1 。
 * void remove(key) 如果映射中存在 key 的映射，则移除 key 和它所对应的 value 。
 */
public class no706 {
    public static void main(String[] args) {

        MyHashMap map = new MyHashMap();
        map.put(1,2);
    }
}
class Pair{
    private int key;
    private int value;
    public int getKey() {
        return key;
    }
    public void setKey(int key) {
        this.key = key;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }
    public Pair(int key, int value) {
        this.key = key;
        this.value = value;
    }
}
class MyHashMap {
    class ListNode<E>{
        E val;
        linkedlist.ListNode next;
        public ListNode() {
        }
        public ListNode(E val) {
            this.val = val;
        }
    }

    ListNode[] map;
    public final int BASE = 769;
    public MyHashMap() {
        map = new ListNode[BASE];
        for (int i = 0; i < BASE; ++i) {
            map[i] = new ListNode<Pair>();
        }
    }
    public void put(int key, int value) {
        Pair pair = new Pair(key,value);
        int index = hash(key);
        ListNode cur = map[index];
        ListNode prev = cur;
        if (cur.val == null) {
            map[index] = new ListNode(pair);
            return;
        }
//        while (cur != null) {
//            if (cur.val == key) {
//                cur.val.value = value;
//                return;
//            }
//            if (cur.next == null) {
//                prev = cur;
//            }
//            cur = cur.next;
//        }
//        prev.next = new ListNode(pair);
    }

//    public int get(int key) {
//        int index = hash(key);
//        ListNode cur = map[index];
//        while (cur != null) {
//            if (cur.val.key == key) {
//                return cur.val.value;
//            }
//            cur = cur.next;
//        }
//        return -1;
//    }
    public void remove(int key) {
//        int index = hash(key);
//        ListNode cur = map[index];
//        ListNode prev = cur;
//        while (cur != null){
//            if (cur.val.key == key){
//                if (cur == prev){
//                    map[index] = map[index].next;
//                    return;
//                }else{
//                    prev.next = cur.next;
//                    return;
//                }
//            }
//            prev = cur;
//            cur = cur.next;
//        }
    }
    private int hash(int key) {
        return key % BASE;
    }
}